package com.example.singing.util;

import java.io.*;

/**
 * 文件操作工具类
 */
public class FileUtil {
    // 确保存储目录存在
    private static final String DATA_DIR = "data";
    
    static {
        // 初始化数据目录
        File dir = new File(DATA_DIR);
        if (!dir.exists()) {
            if (dir.mkdir()) {
                System.out.println("创建数据目录成功: " + DATA_DIR);
            } else {
                System.err.println("创建数据目录失败: " + DATA_DIR);
            }
        }
    }

    /**
     * 保存数据到文件
     */
    public static void saveData(Object data, String filename) {
        // 使用数据目录存储文件
        String filepath = DATA_DIR + File.separator + filename;
        try (ObjectOutputStream oos = new ObjectOutputStream(
                new FileOutputStream(filepath))) {
            oos.writeObject(data);
            System.out.println("数据已成功保存到文件: " + filepath);
        } catch (IOException e) {
            System.err.println("保存数据失败: " + e.getMessage());
            System.err.println("尝试保存到: " + filepath);
            System.err.println("当前工作目录: " + System.getProperty("user.dir"));
            e.printStackTrace();
        }
    }

    /**
     * 从文件加载数据
     */
    public static Object loadData(String filename) {
        // 使用数据目录加载文件
        String filepath = DATA_DIR + File.separator + filename;
        File file = new File(filepath);
        if (!file.exists()) {
            System.out.println("文件不存在，返回null: " + filepath);
            return null;
        }

        try (ObjectInputStream ois = new ObjectInputStream(
                new FileInputStream(filepath))) {
            Object data = ois.readObject();
            System.out.println("数据已从文件加载: " + filepath);
            return data;
        } catch (IOException e) {
            System.err.println("加载数据IO异常: " + e.getMessage());
            System.err.println("尝试加载: " + filepath);
            e.printStackTrace();
            return null;
        } catch (ClassNotFoundException e) {
            System.err.println("加载数据类未找到异常: " + e.getMessage());
            e.printStackTrace();
            return null;
        }
    }
}